﻿package Naruto {
    import flash.display.Sprite;
    import flash.events.*;
    import flash.media.Sound;
	import flash.media.SoundChannel;
    import flash.net.URLRequest;
    import flash.system.System;

	import Naruto.Music.*;
	
    public class PlayMusic extends Sprite {
        private var mySound:Sound ;
		private var _soundChannel:SoundChannel;
		private var _request:URLRequest;

		/**
		 * 音乐加载完成事件监听列表
		 * 
		 */
		private var _musicLoadCompleteListeners : Array = null;
		
		public function PlayMusic(num:int){
			this.mySound = new Sound();
			this._soundChannel = new SoundChannel();
			//是否使用系统默认编码
            //System.useCodePage=true;
            //以后在AS3中加载一个指定路径的文件,路径必须先由String字符串转成URLRequest
            var url:String = "Naruto/Music/Music" + num + ".mp3";
			this._request = new URLRequest(url);
            //添加ID3事件侦听器
            //mySound.addEventListener(Event.ID3, Id3Handler);
			
			mySound.addEventListener(Event.COMPLETE, this.musicLoadComplete);
            mySound.load(this._request);
		}
		
		public function musicLoadComplete(e : Event) : void {
			this.onMusicLoadComplete(e);
		}
		
		/**
		 * 音乐加载完成事件函数
		 *
		 * @param e
		 * 
		 */
		protected function onMusicLoadComplete(e : Event) : void {
			if (this._musicLoadCompleteListeners != null) {
				for each (var obj:Function   in this._musicLoadCompleteListeners) {
					obj(e);
				}
			}
		}
		
		/**
		 * 用于外部调用，将记录者（记录加载情况者）放入完成监听数组 _musicLoadCompleteListeners[]
		 * 当有事件加载完后，会触发 musicLoadComplete(e:Event)函数，他会将 e 传入完成监听数组元素的函数中，也就是传入每个数组元素的函数参数
		 * 然后外部函数 musicLoadComplete 会记录加载完成情况 
		 */
		public function addMusicLoadCompleteListener(f : Function) : void {
			if (this._musicLoadCompleteListeners == null) {
				this._musicLoadCompleteListeners = new Array();
			}

			this._musicLoadCompleteListeners.push(f);
		}
		
		public function Play(){
			//mySound.play(0,int.MAX_VALUE);
			_soundChannel = mySound.play(0,int.MAX_VALUE);
		}

		public function Stop(){
			_soundChannel.stop();
		}
		
		/*
        //ID3事件触发时执行的方法
        private function Id3Handler(event:Event):void {
            //在输出面板输出消息
            trace(String("歌曲ID3信息："+mySound.id3.artist));
        }
		*/
    }
}